package com.fingard.csp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableSwagger2
public class Swagger2Config {
    @Bean
    public Docket createRestApi() {
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        tokenPar.name("Authorization").description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
        pars.add(tokenPar.build());

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(true)//是否开启Swagger2(true-默认开启,false-隐藏,生产环境建议隐藏)
                .select()
                //扫描的路径包,设置basePackage会将包下的所有被@Api标记类的所有方法作为api
                .apis(RequestHandlerSelectors.basePackage("com.fingard.csp.controller"))
                //指定路径处理PathSelectors.any()代表所有的路径
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(pars);
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //设置文档标题(API名称)
                .title("CSP-渠道模拟平台 官方在线文档")
                //文档描述
                .description("CSP - 渠道模拟平台，主要介绍渠道模拟器的在线Restful风格接口及model实体信息，" +
                        "<br/>可供现场实施、测试等成员进行接口信息查看及接口测试参考。" +
                        "<br/>如对接口有疑问，可通过以下邮件的方式联系管理员。" +
                        "<br/>感谢使用渠道模拟平台，希望可以给你带来更友好的服务体验。")
                //服务条款URL
//                .termsOfServiceUrl("http://localhost:8888/csp/swagger-ui.html")
                .contact(new Contact("孤独的代码猴","https://blog.csdn.net/vipfhh","fanghh@fingard.com"))
                //版本号
                .version("v1.0.1")
                .license("保融科技股份有限公司@版权所有")
                .licenseUrl("http://www.fingard.com")
                .build();
    }
}